package br.com.stefanini.schs.ejb.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "justificativa")
@NamedQueries({ 
	@NamedQuery(name = "Justificativa.consultarTodasJustificativas" , query = "select j from Justificativa j"),
	@NamedQuery(name = "Justificativa.consultarJustificativaFuncionario", query = "select j from Justificativa j where j.funcionario.idFuncionario = :idFuncionario and j.documento.status = :status"),
	@NamedQuery(name = "Justificativa.consultarJustificativasEmAnalise" , query = "select j from Justificativa j where j.documento.status = 1"),
	@NamedQuery(name = "Justificativa.consultarJustificativasAceitas" , query = "select j from Justificativa j where j.documento.status = 2"),
	@NamedQuery(name = "Justificativa.consultarJustificativasRejeitadas" , query = "select j from Justificativa j where j.documento.status = 3")
	})
public class Justificativa implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(name = "idJustificativa", sequenceName = "idJustificativa", allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idJustificativa")
	@Column(name = "idJustificativa")
	private long idJustificativa;

	@Column
	private String descricao;

	@Column
	private Date dataJustificada;

	// *** RELACIONAMENTOS ***

	@OneToOne(mappedBy = "justificativa" ,targetEntity = Documento.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	private Documento documento;
	
	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	@JoinColumn(name = "fk_idFuncionario")
	private Funcionario funcionario;

	// *** RELACIONAMENTOS ***

	public long getIdJustificativa() {
		return idJustificativa;
	}

	public String getDescricao() {
		return descricao;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setIdJustificativa(long idJustificativa) {
		this.idJustificativa = idJustificativa;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Date getDataJustificada() {
		return dataJustificada;
	}

	public void setDataJustificada(Date dataJustificada) {
		this.dataJustificada = dataJustificada;
	}

	public Documento getDocumento() {
		return documento;
	}

	public void setDocumento(Documento documento) {
		this.documento = documento;
	}

}
